home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Camelot / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].zip / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].adf / MSH / src / device.h < prev    next >
C/C++ Source or Header  |  1990-06-17  |  5KB  |  198 lines

  1. /*-
  2.  *  $Id: device.h,v 1.30 90/06/04 23:19:28 Rhialto Rel $
  3.  *  $Log:    device.h,v $
  4.  * Revision 1.30  90/06/04  23:19:28  Rhialto
  5.  * Release 1 Patch 3
  6.  * 
  7.  *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May
  8.  *  not be used or copied without a licence.
  9. -*/
  10.  
  11. #define MD_NUMUNITS    4
  12.  
  13. #define VERSION     34L
  14. #define REVISION    8
  15.  
  16. #asm
  17. VERSION     equ     34
  18. RTPRI        equ     0
  19. #endasm
  20.  
  21. struct MessyDevice {
  22.     struct Device   md_Dev;
  23.     struct MessyUnit *md_Unit[MD_NUMUNITS];
  24.     long        md_Seglist;
  25.     struct SignalSemaphore md_HardwareUse;
  26.     byte       *md_Rawbuffer;
  27.     byte        md_MfmDecode[128];
  28. };
  29.  
  30. #define dev_Node    md_Dev.dd_Library.lib_Node
  31. #define dev_Flags    md_Dev.dd_Library.lib_Flags
  32. #define dev_NegSize    md_Dev.dd_Library.lib_NegSize
  33. #define dev_PosSize    md_Dev.dd_Library.lib_PosSize
  34. #define dev_Version    md_Dev.dd_Library.lib_Version
  35. #define dev_Revision    md_Dev.dd_Library.lib_Revision
  36. #define dev_IdString    md_Dev.dd_Library.lib_IdString
  37. #define dev_OpenCnt    md_Dev.dd_Library.lib_OpenCnt
  38.  
  39. struct MessyUnit {
  40.     struct MsgPort  mu_Port;
  41.     short        mu_OpenCnt;
  42.     short        mu_UnitNr;
  43.     byte        mu_Flags;
  44.     char        mu_InitSectorStatus;
  45.     ulong        mu_ChangeNum;
  46.     char        mu_DiskState;
  47.     byte        mu_DmaSignal;
  48.     short        mu_SectorsPerTrack; /* The nominal #sectors/track */
  49.     short        mu_CurrentSectors;    /* The current #sectors on this track */
  50.     short        mu_CurrentTrack;    /* Position of the head, and */
  51.     short        mu_CurrentSide;    /* what's in the track buffer */
  52.     short        mu_TrackChanged;
  53.     struct DiskResourceUnit mu_DRUnit;
  54.     struct MsgPort  mu_DiskReplyPort;
  55.     struct IOExtTD *mu_DiskIOReq;
  56.     struct IOStdReq *mu_DiskChangeReq;
  57.     struct Interrupt mu_DiskChangeInt;
  58.     struct MinList  mu_ChangeIntList;
  59.     short        mu_NumCyls;
  60.     byte        mu_TrackBuffer[MS_SPT_MAX * MS_BPS];   /* Must be word aligned */
  61.     word        mu_CrcBuffer[MS_SPT_MAX];
  62.     char        mu_SectorStatus[MS_SPT_MAX];
  63. };
  64.  
  65. #define     TDERR_NoError   0
  66. #define     CRC_UNCHECKED   -1
  67. #define     CRC_CHANGED     -2
  68.  
  69. #define UNITB_ACTIVE    0
  70. #define UNITF_STOPPED    (1<<2)
  71. #define UNITF_WAKETASK    (1<<3)
  72.  
  73. #define STATEF_UNKNOWN    (1<<0)
  74. #define STATEF_PRESENT    (1<<1)
  75. #define STATEF_WRITABLE (1<<2)
  76.  
  77. /* Some constants related to #defines */
  78. #asm
  79. MS_BPS            equ 512
  80. MS_BPScode        equ 2            ; 2log(MSBPS/128)
  81. LOG2_MS_BPS        equ 9
  82. MS_SPT            equ 9
  83. MS_SPT_MAX        equ 10
  84. #endasm
  85.  
  86. typedef struct MessyDevice DEV;
  87. typedef struct MessyUnit   UNIT;
  88.  
  89.  
  90. #define TASKPRI     5L
  91. #define TASKSTACK   1024L
  92.  
  93. /*
  94.  *  Which of the device commands are real, and which are
  95.  *  routed to trackdisk.device.
  96.  */
  97.  
  98. /*  #define CMD_Invalid     /**/
  99. /*  #define CMD_Reset        /**/
  100. /*  #define CMD_Read        /**/
  101. /*  #define CMD_Write        /**/
  102. /*  #define CMD_Update        /**/
  103. /*  #define CMD_Clear        /**/
  104. /*  #define CMD_Stop        /**/
  105. /*  #define CMD_Start        /**/
  106. /*  #define CMD_Flush        /**/
  107.     #define TD_Motor        TrackdiskGateway
  108. /*  #define TD_Seek        /**/
  109. /*  #define TD_Format        /**/
  110.     #define TD_Remove        TrackdiskGateway
  111. /*  #define TD_Changenum    /**/
  112.     #define TD_Changestate  TrackdiskGateway
  113.     #define TD_Protstatus   TrackdiskGateway
  114.     #define TD_Rawread        TrackdiskGateway
  115.     #define TD_Rawwrite     TrackdiskGateway
  116.     #define TD_Getdrivetype TrackdiskGateway
  117.     #define TD_Getnumtracks TrackdiskGateway
  118. /*  #define TD_Addchangeint /**/
  119. /*  #define TD_Remchangeint /**/
  120.  
  121. #define STRIP(cmd)  ((unsigned char)cmd)
  122. #define IMMEDIATE   ((1<<CMD_INVALID)|(1<<CMD_RESET)|\
  123.              (1<<CMD_STOP)|(1<<CMD_START)|(1<<CMD_FLUSH)|\
  124.              (1L<<TD_ADDCHANGEINT))
  125. #define PerformIO(ioreq, unit) \
  126.             (funcTable[STRIP(ioreq->io_Command)])(ioreq, unit)
  127.  
  128. extern DEV *MakeLibrary();
  129. extern struct Task *FindTask();
  130. extern struct Task *CreateTask();
  131.  
  132. /*
  133.  *  Forward declarations:
  134.  */
  135.  
  136. extern char EndCode;
  137. extern void Init(), _DevOpen(), _DevClose(), _DevExpunge(), _LibNull();
  138. extern void _DevBeginIO(), _DevAbortIO();
  139.  
  140. extern char DevName[], idString[];
  141.  
  142. extern DEV *CInit();
  143. extern void DevOpen();
  144. extern long DevClose(), DevExpunge();
  145. extern void DevBeginIO(), TermIO();
  146. extern long DevAbortIO();
  147.  
  148. extern void WakePort();
  149. extern void UnitTask();
  150.  
  151. extern int DevInit();
  152. extern UNIT *UnitInit();
  153. extern void DiskChangeHandler();
  154.  
  155. extern void TrackdiskGateway();
  156. extern void CMD_Invalid();
  157. extern void CMD_Reset();
  158. extern void CMD_Read();
  159. extern void CMD_Write();
  160. extern void CMD_Update();
  161. extern void CMD_Clear();
  162. extern void CMD_Stop();
  163. extern void CMD_Start();
  164. extern void CMD_Flush();
  165. extern void TD_Seek();
  166. extern void TD_Format();
  167. extern void TD_Changenum();
  168. extern void TD_Addchangeint();
  169. extern void TD_Remchangeint();
  170.  
  171. extern struct DiskResource *OpenResource();
  172. extern struct MsgPort *DeviceProc();
  173. extern struct MsgPort *CreatePort();
  174. extern struct IOExtTD *CreateExtIO();
  175. extern void    *GetUnit(), *GetMsg();
  176. extern long    Wait();
  177. extern void    *AllocMem(), FreeMem();
  178. extern byte    *index(), *rindex();
  179.  
  180. extern int    ReadTrack();
  181. extern void    InitDecoding();
  182. extern int    TDSeek();
  183. extern int    TDMotorOn();
  184. extern int    TDMotorOff();
  185. extern int    TDGetNumCyls();
  186. extern void    *GetDrive();
  187. extern void    FreeDrive();
  188. extern int    DevOpenUp();
  189. extern int    DevCloseDown();
  190. extern int    GetTrack();
  191. extern int    CheckRequest();
  192.  
  193. #ifndef READONLY
  194. extern int    InitWrite();
  195. extern void    FreeBuffer();
  196. extern void    EncodeTrack();
  197. #endif
  198.